package com.zhongwang.mms.module.buy.model;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhongwang.mms.base.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @Description: 提报计划 Model
 * @Author: China.sgl
 * @Date: 2020/4/7 15:46
 */
@SuppressWarnings("ALL")
@Data
@EqualsAndHashCode(callSuper = true)
public class ReportPlanModel extends BaseModel {

    /**
     * 主键
     */
    @ExcelIgnore
    private Integer rppId;

    /**
     * 物料描述
     */
    @ExcelProperty(value = "物料描述", index = 1)
    @NumberFormat("#")
    private String rppMatDesc;

    /**
     * 物料编码
     */
    @ExcelIgnore
    private String rppMatCode;

    /**
     * 数量
     */
    @ExcelProperty(value = "数量", index = 2)
    @NumberFormat("#.##")
    private Double rppNum;

    /**
     * 实用数量
     */
    @ExcelProperty(value = "实用数量", index = 3)
    @NumberFormat("#.##")
    private Double rppRealNum;

    /**
     * 余量
     */
    @ExcelProperty(value = "余量", index = 4)
    @NumberFormat("#.##")
    private Double rppOverNum;

    /**
     * 单位
     */
    @ExcelProperty(value = "单位", index = 5)
    @NumberFormat("#")
    private String rppUnit;

    /**
     * 标准号
     */
    @ExcelProperty(value = "标准号", index = 6)
    @NumberFormat("#")
    private String rppStandardNo;

    /**
     * 项目名称
     */
    @ExcelProperty(value = "项目名称", index = 11)
    @NumberFormat("#")
    private String rppProjectName;

    /**
     * 项目编号
     */
    @ExcelProperty(value = "项目编号", index = 10)
    @NumberFormat("#")
    private String rppProjectCode;

    /**
     * 品牌
     */
    @ExcelProperty(value = "品牌", index = 8)
    @NumberFormat("#")
    private String rppBrand;

    /**
     * 备注
     */
    @ExcelProperty(value = "备注", index = 9)
    @NumberFormat("#")
    private String rppRemark;

    /**
     * 部位(文字描述)
     */
    @ExcelIgnore
    private String rppPart;

    /**
     * 提报人
     */
    @ExcelIgnore
    private String rppDesigner;

    /**
     * 提报计划员（物控员）
     */
    @ExcelProperty(value = "计划员", index = 0)
    @NumberFormat("#")
    private String rppPlanner;

    /**
     * 创建时间
     */
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date rppCreateTime;

    /**
     * 创建人
     */
    @ExcelIgnore
    private String rppCreateUser;

    /**
     * 原始提报计划标识 1=原始计划  2=拆分计划  3=已拆分的原始计划
     */
    @ExcelIgnore
    private Integer rppOriginalFlag;

    /**
     * 对应采购计划Id
     */
    @ExcelIgnore
    private Integer rppSppId;

    /**
     * 数据状态 -3删除审核通过 -2=导入删除 -1=导入未提交 1=删除待审 2=正常 3=提交
     */
    @ExcelIgnore
    private Integer rppStatus;

    /**
     * 拆分后，源计划Id
     */
    @ExcelIgnore
    private Integer rppSrcId;

    /**
     * 是否不可撤消拆分  1=是 2=否
     */
    @ExcelIgnore
    private Integer rppAllowCancel;

    /**
     * 是否使用库存 0=空 1=使用库存 2=正常提报 3=暂不提报
     */
    @ExcelIgnore
    private Integer rppUseStock;
    /**
     * 是否使用库存 0=空 1=使用库存 2=正常提报 3=暂不提报
     */
    @ExcelIgnore
    private String rppUseStockStr;

    /**
     * 分类Id
     */
    @ExcelIgnore
    private Integer rppTypeId;

    /**
     * 分类名称
     */
    @ExcelProperty(value = "分类", index = 7)
    @NumberFormat("#")
    private String rppTypes;

    /**
     * 库存Id， 备用（暂时用不上）
     */
    @ExcelIgnore
    private Integer rppStockId;

    /**
     * 提报标识 1=暂不提报 2=正常提报  作废
     */
    @ExcelIgnore
    private Integer rppSubFlag;

    /**
     * 计划号
     */
    @ExcelProperty(value = "计划号", index = 12)
    @NumberFormat("#")
    private String rppPlanNo;

    /**
     * 库存类型 h:成品库,p:外购件库,m:原料库
     */
    @ExcelIgnore
    private String rppItyType;

    /**
     * 变更原因
     */
    @ExcelIgnore
    private String rppChange;

    /**
     * 是否选择库存标志 0=否 1=是
     */
    @ExcelIgnore
    private Integer rppIsFlag;

    /**
     * 是否补计划 0=否 1=是
     */
    @ExcelIgnore
    private Integer rppAppend;

    /**
     * 原料入库ID
     */
    @ExcelIgnore
    private Integer rppOdaId;

    /**
     * 原料回货状态 1=已回货
     */
    @ExcelIgnore
    private Integer rppRetStatus;

    /**
     * 变更标记 1=发生变更采购计划未变更
     */
    @ExcelIgnore
    private Integer rppChangeMark;

    /**
     * 删除时间
     */
    @ExcelIgnore
    private Date rppDelTime;

    /**
     * 指定物料描述
     */
    @ExcelIgnore
    private String rppAssignDesc;

    /**
     * 生产编号
     */
    @ExcelProperty(value = "生产编号", index = 15)
    private String rppProduceCode;

    /**
     * 提交时间
     */
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date rppCommitTime;

    /**
     * 删除原因
     */
    @ExcelIgnore
    private String rppDelReason;


    /**
     * 外购件指定信息
     */
    @ExcelIgnore
    private String code;
    @ExcelIgnore
    private String info;
    @ExcelIgnore
    private Double num;
    @ExcelIgnore
    private String name;
    @ExcelIgnore
    private String standardNo;

    /**
     * 提报状态 导入的时候转成状态位
     */
    @ExcelProperty(value = "提报状态", index = 13)
    @NumberFormat("#")
    private String rppReportStatus;

    /**
     * 是否补计划，导入的时候转成状态位
     */
    @ExcelProperty(value = "是否补计划", index = 14)
    @NumberFormat("#")
    private String rppAppendStr;

    /**
     * 生产状态
     */
    @ExcelIgnore
    private Integer rppProjectState;

    /**
     * 生产状态
     */
    @ExcelIgnore
    private String rppProjectStateStr;

    /**
     * 源始提报计划数量
     */
    @ExcelIgnore
    private Integer srcNum;

    /**
     * 已拆分提报计划数量
     */
    @ExcelIgnore
    private Integer alreadySplitNum;

    /**
     * 采购计划状态
     */
    @ExcelIgnore
    private Integer sppStatus;

    @ExcelProperty(value = "原因", index = 16)
    @NumberFormat("#")
    private String reason;

    /**
     * 页面多条件查询使用
     */
    @ExcelIgnore
    private List<String> rppMatDescArray;
    /**
     * 页面多条件查询使用
     */
    @ExcelIgnore
    private String rppMatDescArrayStr;
    /**
     * 页面多条件查询使用
     */
    @ExcelIgnore
    private List<String> rppProjectCodeArray;
    /**
     * 页面多条件查询使用
     */
    @ExcelIgnore
    private String rppProjectCodeArrayStr;
    /**
     * 页面条件查询使用 修改提报状态开始时间
     */
    @ExcelIgnore
    private Date startTimeByEdit;
    /**
     * 页面条件查询使用 修改提报状态结束时间
     */
    @ExcelIgnore
    private Date endTimeByEdit;
    /**
     * 页面显示使用，物资状态列，正常提报，暂不提报（全部暂缓），部分暂缓（部分提报）
     */
    @ExcelIgnore
    private Integer proMaterialControlStatus;

    public void setEndTimeByEdit(Date endTimeByEdit) {
        if (endTimeByEdit != null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(endTimeByEdit);
            cal.add(Calendar.DAY_OF_YEAR, 1);
            this.endTimeByEdit = cal.getTime();
        }
    }

    /**
     * 物控计划
     */
    @ExcelIgnore
    private Integer mcStatus;
    /**
     * 是否按照物控状态修改提报状态
     */
    @ExcelIgnore
    private Integer rppIsChangeStatusFlag;
    /**
     * 排序字段
     */
    @ExcelIgnore
    private Integer orderColumn;
    /**
     * 物控员备注列
     */
    @ExcelIgnore
    private String rppPlannerRemark;
    /**
     * 物料类型
     */
    @ExcelIgnore
    private String rppMalType;
    /**
     * 是否使用库存
     */
    @ExcelIgnore
    private Integer rppUseStore;
    /**
     * 图号
     */
    @ExcelIgnore
    private String rppDiagram;
    /**
     * 外协类型
     */
    @ExcelIgnore
    private String rppAssistType;
    /**
     * 提报人联系方式
     */
    @ExcelIgnore
    private String rppDesignerTel;
    /**
     * 编辑状态
     */
    @ExcelIgnore
    private Integer rppEditFlag;
    /**
     * 提报人所属部门
     */
    @ExcelIgnore
    private String rppDesignerDept;
    /**
     * 是否提交到计划员状态 1=未提交 2=已提交
     */
    @ExcelIgnore
    private Integer rppPostPlannerStatus;

    /**
     * PDM结果表ID（B表）
     */
    @ExcelIgnore
    private Integer rppResultId;
    /**
     * 附件路径
     */
    @ExcelIgnore
    private String rppExtendUrl;
    /**
     * 接收时间
     */
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date rppRecTime;
    /**
     * 多个ID
     */
    @ExcelIgnore
    private String rppIds;
    /**
     * 生产令编号
     */
    @ExcelIgnore
    private String rppProdNo;
    /**
     * 临时表名
     */
    @ExcelIgnore
    private String tempTableName;
    /**
     * 查询使用
     */
    @ExcelIgnore
    private Integer topCount;

    /**
     * 查询使用
     */
    @ExcelIgnore
    private Integer notHaveTopCount;

    /**
     * 拆分类型 ：
     * source是祖宗级
     * old是被拆分的子级
     * oldSource是被拆分的祖宗级
     * new是拆分出来的，一般搜索界面的列表只显示new。
     */
    @ExcelIgnore
    private String rppSplitPlanType;

    /**
     * 祖宗ID
     */
    @ExcelIgnore
    private Integer rppAncestorsId;

    /**
     * 指定单价
     */
    @ExcelIgnore
    private Double rppAssignUseStockPrice;
    /**
     * 指定时间
     */
    @ExcelIgnore
    private Date rppAssignDate;
    /**
     * 确认回货单价
     */
    @ExcelIgnore
    private Double rppBuyPrice;
    /**
     * 确认回货时间
     */
    @ExcelIgnore
    private Date rppConfirmReturnDate;
    /**
     * 补录原因
     */
    @ExcelIgnore
    private String rppSupReasons;
    /**
     * 项目数量
     */
    @ExcelIgnore
    private Double rppProjectNum;


    @ExcelIgnore
    private Integer rppAppendId;
    @ExcelIgnore
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date rppEditTime;
    @ExcelIgnore
    private Date rppChangeTime;

    @ExcelIgnore
    private String rppRemarkSapCode;

    @ExcelIgnore
    private String rppRemarkMatDesc;
    /**
     * 部门名称
     */
    @ExcelIgnore
    private String rppBranchName;
    /**
     * 手动指定单位
     */
    @ExcelIgnore
    private String rppDiyAssignUseStockUnit;
    /**
     * 自动指定单位
     */
    @ExcelIgnore
    private String rppAutoAssignUseStockUnit;
    /**
     * 手动指定数量
     */
    @ExcelIgnore
    private Double rppDiyAssignUseStockNum;
    /**
     * 自动指定数量
     */
    @ExcelIgnore
    private Double rppAutoAssignUseStockNum;

    /**
     * 部门名称
     */
    @ExcelIgnore
    private Integer rppNumIsZero;
}
